/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * Bytecode optimization declarations.
 */
#ifndef DALVIK_OPTIMIZE_H_
#define DALVIK_OPTIMIZE_H_

#include "../oo/Object.h"
#include "../Common.h"
#include "../Dalvik.h"

/*
 * Entry point from DEX preparation.
 */
void dvmOptimizeClass(ClassObject *clazz, bool essentialOnly);

/*
 * Update a 16-bit code unit.
 */
void dvmUpdateCodeUnit(const Method *meth, u2 *ptr, u2 newVal);

/*
 * Abbreviated resolution functions, for use by optimization and verification
 * code.
 */
ClassObject *dvmOptResolveClass(ClassObject *referrer, u4 classIdx,
                                VerifyError *pFailure);

Method *dvmOptResolveMethod(ClassObject *referrer, u4 methodIdx,
                            MethodType methodType, VerifyError *pFailure);

Method *dvmOptResolveInterfaceMethod(ClassObject *referrer, u4 methodIdx);

InstField *dvmOptResolveInstField(ClassObject *referrer, u4 ifieldIdx,
                                  VerifyError *pFailure);

StaticField *dvmOptResolveStaticField(ClassObject *referrer, u4 sfieldIdx,
                                      VerifyError *pFailure);

#endif  // DALVIK_OPTIMIZE_H_
